bitkeeper revision 1.302 (3f0ac82dINhdLC_gSixgqsq54YoRug)
authorsos22@labyrinth.cl.cam.ac.uk <sos22@labyrinth.cl.cam.ac.uk>
Tue, 8 Jul 2003 13:33:33 +0000 (13:33 +0000)
committersos22@labyrinth.cl.cam.ac.uk <sos22@labyrinth.cl.cam.ac.uk>
Tue, 8 Jul 2003 13:33:33 +0000 (13:33 +0000)
Argg... the physdev code needs Xen block device numbers, not
physical numbers.

xen/drivers/block/xen_block.c

index 0ee664cda40b743224ffa93d0df1c3ad08799ba3..cef7c5e544090bb1972d4dffc68c27264861be51 100644 (file)
@@ -661,21 +661,22 @@ static void dispatch_rw_block_io(struct task_struct *p, int index)
         }
         else
         {
-            phys_seg[nr_psegs].dev           = xendev_to_physdev(req->device);
+           phys_seg[nr_psegs].dev           = req->device;
             phys_seg[nr_psegs].sector_number = req->sector_number + tot_sects;
             phys_seg[nr_psegs].buffer        = buffer;
             phys_seg[nr_psegs].nr_sects      = nr_sects;
-            if ( phys_seg[nr_psegs].dev == 0 ) 
-           {
-               DPRINTK("bad device\n");
-               goto bad_descriptor;
-           }
            if (p->domain != 0 &&
                !xen_physdisk_access_okay(&phys_seg[nr_psegs], p, operation)) {
              DPRINTK("access denied\n");
              /* XXX not quite right, but close enough. */
              goto bad_descriptor;
            }
+           phys_seg[nr_psegs].dev           = xendev_to_physdev(req->device);
+            if ( phys_seg[nr_psegs].dev == 0 ) 
+           {
+               DPRINTK("bad device\n");
+               goto bad_descriptor;
+           }
             new_segs = 1;
         }